package utils

import (
	"fmt"
)

type FamilyAccount struct {
	//声明一个字段接收用户选择
	key string
	//声明一个字段退出软件
	tuu bool
	//定义账户余额
	date float64
	//定义一个字段，来判断当前有没有收入或支出
	flag bool
	//定义每次收入金额
	money float64
	//定义收支说明
	spaek string
	//当有收支时，只需要对sum进行拼接处理
	sum string
}

//方法1：显示收支明细
func (this *FamilyAccount) showData() {
	fmt.Println("-----------------------当前收支明细记录-----------------------")
	if this.flag {
		fmt.Println(this.sum)
	} else {
		fmt.Println("请来一笔收入或支出吧！！！")
	}
}

//方法2：登记收入
func (this *FamilyAccount) income() {
	fmt.Println("本次收入金额：")
	fmt.Scanln(&this.money)
	this.date += this.money
	fmt.Println("本次收入说明：")
	fmt.Scanln(&this.spaek)
	//将这个收入情况拼接到sum
	this.sum += fmt.Sprintf("\n收入\t%v\t\t%v\t\t%v", this.date, this.money, this.spaek)
	this.flag = true
}

//方法3：登记支出
func (this *FamilyAccount) backcome() {
	fmt.Println("登记支出·····")
	fmt.Println("本次支出金额：")
	fmt.Scanln(&this.money)
	if this.money > this.date {
		fmt.Println("余额不足")
		//break
	}
	this.date -= this.money
	fmt.Println("本次支出说明：")
	fmt.Scanln(&this.spaek)
	//将这个收入情况拼接到sum
	this.sum += fmt.Sprintf("\n收入\t%v\t\t%v\t\t%v", this.date, this.money, this.spaek)
	this.flag = true
}

//方法4：退出软件
func (this *FamilyAccount) backApp() {
	fmt.Println("你确定要退出吗？ y/n")
	choice := ""
	for {
		fmt.Scanln(&choice)
		if choice == "y" || choice == "n" {
			break
		}
		fmt.Println("你输入有误！！！请重新输入 y/n")
	}
	if choice == "y" {
		this.tuu = false
	}
}

//编写一个工厂模式构造方法：返回一个*FamilyAccount实例
func NewFamilyAccount() *FamilyAccount {
	return &FamilyAccount{
		key: "",
		tuu: true,
		//定义账户余额
		date: 200.0,
		//定义一个变量，来判断当前有没有收入或支出
		flag: false,
		//定义每次收入金额
		money: 0.0,
		//定义收支说明
		spaek: "",
		//当有收支时，只需要对sum进行拼接处理
		sum: "收入\t账户余额\t收支金额\t说  明",
	}
}

//绑定方法
func (this *FamilyAccount) MainMenu() {
	//显示主菜单
	for {
		fmt.Println("\n\n------------------家庭收支记账软件------------------")
		fmt.Println("                       1 收支明细")
		fmt.Println("                       2 登记收入")
		fmt.Println("                       3 登记支出")
		fmt.Println("                       4 退出软件")
		fmt.Printf("请选择（1-4）：")
		fmt.Scanln(&this.key)
		fmt.Println()
		switch this.key {
		case "1":
			this.showData()
		case "2":
			this.income()
		case "3":
			this.backcome()
		case "4":
			this.backApp()
		default:
			fmt.Println("请输入正确选项！！！")
		}
		if !this.tuu {
			break
		}
	}
}
